# -*- coding: utf-8 -*-
'''
Created on 25.11.2009
@author: chris
'''
from numpy import *

class Datum09(object):
    '''
    Die Klasse Datum09 wird standardmaeßig mit dem Datum 7.12.09 initialisiert, danach können Methoden
    verwendet werden um von diesem Datum Tage abzuziehen oder hinzuzuzaehlen, außerdem gibt es eine Methode zur
    formatierten Ausgabe des Datums mit jeweiligem Wochentag.
    '''
    __tag = 7
    __monat = 12
    
    def __init__(self):
        self.__hilfsVariable = (31,28,31,30,31,30,31,31,30,31,30,31)
        self.__wochenTage = ('Donnerstag','Freitag','Samstag','Sonntag','Montag','Dienstag','Mittwoch')
        
    '''
    Berechnet aus __tag, __monat, __hilfsVariable und __wochenTage den dazugehoerigen Wochentag und gibt diesen als String zurueck.
    '''      
    def wochenTag(self):
        sumTage = 0
        for i in range(self.__monat-1): #Tage summieren bis einem Monat vor dem gewünschten Monat, d.h. monat -1
            sumTage += self.__hilfsVariable[i]
        sumTage += self.__tag-1 # Tage noch hinzuaddieren, tag-1 da wir schon beim 1. tag im monat stehen       
        return self.__wochenTage[sumTage % 7] #da der 1.1.09 ein donnerstag ist kann man mit sumTage mod7 den 
                                              #richtigen Tag aus der Liste __wochenTage auswählen. 
    '''
    Gibt eine formatieren String des Datums zurueck.
    '''     
    def ausgabe(self):
        return self.wochenTag() +', ' +str(self.__tag) +'.' +str(self.__monat) +'.2009' 
    '''
    Berechnet die Summe der Tage im Jahr fuer das Aktuelle Datum und gibt diese zurueck
    @return: sumDerTageAktuell  
    ''' 
    def sumDerTageAktuell(self):
        summeDerTageAktuell = 0
        if(self.__monat > 1):
            for i in range(self.__monat-1):
                summeDerTageAktuell += self.__hilfsVariable[i]
        summeDerTageAktuell += self.__tag    
        return summeDerTageAktuell
    '''
    Addiert bzw. Subtrahiert vom aktuellen Datum die als Parameter uebergebene Anzahl an Tagen
    @param tage: wenn tage = positiv >> Tage werden addiert, wenn tage = negativ >> Tage werden subtrahiert
    ''' 
    def addiereTage(self,tage):
        sumDerTageAktuell = self.sumDerTageAktuell()
        sumTageImJahr = sum(self.__hilfsVariable)
        if(sumDerTageAktuell + tage >= sumTageImJahr or sumDerTageAktuell + tage <= 0):
            print 'Kann nicht ausgefuert werden, Datum befindet sich nicht im Jahr 2009'                     
        elif(self.__tag + tage in range(self.__hilfsVariable[self.__monat-1])):
           self.__tag += tage
        else: #wenn sich das neue Datum in einem neuem Monat befindet verwende diesen block
            sumDerTageAktuell += tage
            i = 0
            self.__monat = 1
            while i < len(self.__hilfsVariable):
                if(sumDerTageAktuell - self.__hilfsVariable[i] > 0):
                    sumDerTageAktuell -= self.__hilfsVariable[i]
                else:
                    break
                i += 1
                self.__monat += 1
            self.__tag = sumDerTageAktuell    
                    
        
        
        
                  
        
        
        
        
        